//package com.unicom.springhw.until;
//
//import javax.imageio.ImageIO;
//import java.awt.image.BufferedImage;
//import java.io.ByteArrayOutputStream;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.IOException;
//import java.util.Base64;
//import java.util.HashMap;
//import java.util.Map;
//
//public class AliIDPhotoApiCall {
//    private final int MaxPhotoEdge = 1500;
//    /*
//    将图片缩放
//     */
//    public byte[] resizeAndReadImage(File srcFile) throws IOException {
//        ByteArrayOutputStream out = null;
//        try{
//            // 构造Image对象
//            BufferedImage src = ImageIO.read(srcFile);
//            int width = src.getWidth();
//            int height = src.getHeight();
//
//            int maxEdge = Math.max(width, height);
//
//            // 接口要求图片最长边不超过1500个像素，超过的话，需要先做缩放
//            if (maxEdge <= this.MaxPhotoEdge) {
//                FileInputStream inputFile = new FileInputStream(srcFile);
//                byte[] buffer = new byte[(int)srcFile.length()];
//                inputFile.read(buffer);
//                inputFile.close();
//                return buffer;
//            }
//            float ratio = (float)this.MaxPhotoEdge / (float)maxEdge;
//            int newWidth = (int)((float)width * ratio);
//            int newHeight = (int)((float)height * ratio);
//
//            BufferedImage tag = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
//            tag.getGraphics().drawImage(src, 0, 0, newWidth, newHeight, null);
//
//            out = new ByteArrayOutputStream();
//            ImageIO.write(tag, "JPEG", out);
//            return out.toByteArray();
//        }catch(Exception e){
//            e.printStackTrace();
//        }finally{
//            if(out != null){
//                out.close();
//            }
//        }
//        return null;
//    }
//    private String base64(byte[] bytes) {
//        return Base64.getEncoder().encodeToString(bytes);
//    }
//
//    public String apiCall(String apiServer, String apiUri, File imageFile, Map<String,String> args) {
//        try {
//
//            byte[] buffer = resizeAndReadImage(imageFile);
//            if (buffer == null) {
//                return null;
//            }
//            // BASE64Encoder b64Encoder = new BASE64Encoder();
//            String imageBase64 = base64(buffer);
//            String fileName = imageFile.getName();
//            String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
//            String photoType = fileExt.replace(".", "");
//
//            String body = "";
//            if (args != null) {
//                for (Map.Entry<String, String> entry : args.entrySet()) {
//                    if (body.length() > 0) {
//                        body += ",";
//                    }
//                    body += String.format("\"%s\":\"%s\"",
//                            entry.getKey(),
//                            entry.getValue());
//                }
//            }
//            if (body.length() > 0) {
//                body += ",";
//            }
//            body = "{" + body + "\"photo\":\"" + imageBase64 + "\"," +
//                    "\"type\":\"" + photoType + "\"}";
//
//            String bodyMd5 = base64(md5Hash(body));
//
//            String method = "POST";
//            String accept = "application/json";
//            String contentType = "application/octet-stream; charset=utf-8";
//            String dateStr = "";
//            String signHeaders = "";
//
//            String stringToSign = method + '\n'
//                    + accept + '\n'
//                    + bodyMd5 + '\n'
//                    + contentType + '\n'
//                    + dateStr + '\n'
//                    + signHeaders
//                    + apiUri;
//
//            String signed = base64(sha256HMAC(stringToSign, this.AppSecret));
//
//            Map<String,String> headers = new HashMap<String, String>();
//            headers.put("Accept", accept);
//            headers.put("Content-MD5", bodyMd5);
//            headers.put("Content-Type", contentType);
//            headers.put("X-Ca-Key", this.AppKey);
//            headers.put("X-Ca-Signature", signed);
//            headers.put("X-Ca-Stage", this.Stage);
//
//            String result = httpPost(apiServer + apiUri, headers, body);
//            if (result == null) {
//                System.out.println("httpPost call fail");
//                return null;
//            }
//
//            System.out.println("result:" + result);
//            return result;
//
//
//        }
//        catch (Exception e) {
//            System.out.println("Exception:" + e.getMessage());
//            e.printStackTrace();
//        }
//
//        return null;
//    }
//}
